/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import bentity.beProducto;
import bentity.beProveedor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author chokewanka
 */
public class daoProveedor {

    public ArrayList<beProveedor> todosLosProveedores() throws Exception {
        ArrayList<beProveedor> Proveedores = new ArrayList<beProveedor>();
        beProveedor tp = null;
        Connection conn = daoHelper.dameConexion();
        String sql = "SELECT PV.* FROM PROVEEDOR PV, DATOS_COMBO CMB WHERE PV.ESTADO=CMB.ID_DATO AND CMB.NOMBRE_DATO=? AND CMB.NOMBRE_COMBO=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,beProveedor.nombreActivo);
        ps.setString(2,beProveedor.nombreCombo);
        ResultSet rs = ps.executeQuery();
        while (rs.next()){
            tp = new beProveedor(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6),rs.getString(7),rs.getInt(8));
            Proveedores.add(tp);
        }
        rs.close();
        ps.close();
        conn.close();
        return Proveedores;
    }

    public ArrayList<beProveedor> dameProveedoresDeUnProducto(int idProducto) throws Exception{
            ArrayList<beProveedor> Proveedores = new ArrayList<beProveedor>();
            beProveedor tp = null;
            Connection conn = daoHelper.dameConexion();
            String sql = "SELECT PV.* FROM PROVEEDOR PV, PROVEEDOR_X_PRODUCTO PXP, PRODUCTO PD, DATOS_COMBO CMB ";
            sql += "WHERE PV.ESTADO=CMB.ID_DATO AND CMB.NOMBRE_DATO=? AND CMB.NOMBRE_COMBO=? AND PV.ID_PROVEEDOR=PXP.ID_PROVEEDOR AND PXP.ID_PRODUCTO=PD.ID_PRODUCTO AND PD.ID_PRODUCTO=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, beProveedor.nombreActivo);
            ps.setString(2, beProveedor.nombreCombo);
            ps.setInt(3, idProducto);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                tp = new beProveedor(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7), rs.getInt(8));
                Proveedores.add(tp);
            }
            rs.close();
            ps.close();
            conn.close();
            return Proveedores;

    }

    public ArrayList<beProveedor> busquedaProveedoresDAO(String razonProveedor, String rucProveedor, String direccionProveedor, String contactoProveedor, String emailProveedor, String telefonoProveedor) throws Exception{

            Connection conn = daoHelper.dameConexion();
            String cadenaSelect = "SELECT PV.*";
            String cadenaFrom = " FROM PROVEEDOR PV, DATOS_COMBO CMB";
            String cadenaWhere = " WHERE PV.ESTADO= CMB.ID_DATO AND CMB.NOMBRE_DATO=? AND CMB.NOMBRE_COMBO=?";
            int[] contador = new int[8];
            contador[0] = 1;
            contador[1] = 1;
            if (!razonProveedor.equals("")) {
                cadenaWhere += " AND UPPER(PV.RAZON_SOCIAL) LIKE UPPER('%'||?||'%')";
                contador[2] = 1;
            }
            if (!rucProveedor.equals("")) {
                cadenaWhere += " AND UPPER(PV.RUC) LIKE UPPER('%'||?||'%')";
                contador[3] = 1;
            }
            if (!direccionProveedor.equals("")) {
                cadenaWhere += " AND UPPER(PV.DIRECCION) LIKE UPPER('%'||?||'%')";
                contador[4] = 1;
            }
            if (!contactoProveedor.equals("")) {
                cadenaWhere += " AND UPPER(PV.NOMBRE_CONTACTO) LIKE UPPER('%'||?||'%')";
                contador[5] = 1;
            }
            if (!emailProveedor.equals("")) {
                cadenaWhere += " AND UPPER(PV.EMAIL) LIKE UPPER('%'||?||'%')";
                contador[6] = 1;
            }
            if (!telefonoProveedor.equals("")) {
                cadenaWhere += " AND UPPER(PV.TELEFONO) LIKE UPPER('%'||?||'%')";
                contador[7] = 1;
            }
            PreparedStatement ps = conn.prepareStatement(cadenaSelect + cadenaFrom + cadenaWhere);
            int j = 0;
            for (int i = 0; i < 6; i++) {
                if (contador[i] == 1) {
                    j++;
                    switch (i) {
                        case 0:
                            ps.setString(j, beProveedor.nombreActivo);
                            break;
                        case 1:
                            ps.setString(j, beProveedor.nombreCombo);
                            break;
                        case 2:
                            ps.setString(j, razonProveedor);
                            break;
                        case 3:
                            ps.setString(j, rucProveedor);
                            break;
                        case 4:
                            ps.setString(j, direccionProveedor);
                            break;
                        case 5:
                            ps.setString(j, contactoProveedor);
                            break;
                        case 6:
                            ps.setString(j, emailProveedor);
                            break;
                        case 7:
                            ps.setString(j, telefonoProveedor);
                            break;
                    }
                }
            }
            ResultSet rs = ps.executeQuery();
            //        System.out.println("IDUSUARIO\tNOMBRE\tPASSWORD\tESTADO\tCARGO");
            //        while(rs.next())
            //            System.out.println(rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) + "\t"+rs.getString(4)+"\t"+rs.getString(5))
            ArrayList<beProveedor> proveedores = new ArrayList<beProveedor>();
            beProveedor pv = null;
            while (rs.next()) {
                pv = new beProveedor(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7), rs.getInt(8));
                proveedores.add(pv);
            }
            rs.close();
            ps.close();
            conn.close();
            return proveedores;

    }
//
//    public int devolverNuevoIdProveedor() throws Exception{
//
//            int nuevoId = -1;
//            Connection conn = daoHelper.dameConexion();
//            String sql = "SELECT MAX(PV.ID_PROVEEDOR)+1 FROM PROVEEDOR PV";
//            PreparedStatement ps = conn.prepareStatement(sql);
//            ResultSet rs = ps.executeQuery();
//            while (rs.next()) {
//                nuevoId = rs.getInt(1);
//            }
//            rs.close();
//            ps.close();
//            conn.close();
//            return nuevoId;
//    }

    public int registrarProveedor(beProveedor pv) throws Exception{
            Connection conn = daoHelper.dameConexion();
            String sql = "INSERT INTO PROVEEDOR VALUES(?,?,?,?,?,?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            int idProveedor=(daoHelper.getNextId("PROVEEDOR", "ID_PROVEEDOR"));
            ps.setInt(1, idProveedor);
            ps.setString(2, pv.getRazon_Social());
            ps.setString(3, pv.getRuc());
            ps.setString(4, pv.getDireccion());
            ps.setString(5, pv.getTelefono());
            ps.setString(6, pv.getNombre_Contacto());
            ps.setString(7, pv.getEmail());
            ps.setInt(8, pv.getProveedor_Estado());
            ps.executeUpdate();
            ps.close();
            ps.close();
            conn.close();
            return idProveedor;

    }

    public int modificarProveedor(beProveedor pv) throws Exception{
            Connection conn = daoHelper.dameConexion();
            String sql = "UPDATE PROVEEDOR SET razon_social=?,ruc=?,direccion=?,telefono=?,nombre_contacto=?,email=?,estado=? WHERE ID_PROVEEDOR=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, pv.getRazon_Social());
            ps.setString(2, pv.getRuc());
            ps.setString(3, pv.getDireccion());
            ps.setString(4, pv.getTelefono());
            ps.setString(5, pv.getNombre_Contacto());
            ps.setString(6, pv.getEmail());
            ps.setInt(7, pv.getProveedor_Estado());
            ps.setInt(8, pv.getId_Proveedor());

            ps.executeUpdate();
            ps.close();
            ps.close();
            conn.close();
            return daoHelper.TRANSACCION_EXITOSA;
    }

    public beProveedor busquedaProveedorPorID(int idProveedor) throws Exception{

            beProveedor p = null;
            Connection conn = daoHelper.dameConexion();
            String sql = "SELECT * FROM PROVEEDOR WHERE ID_PROVEEDOR = ? ";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, idProveedor);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                p = new beProveedor(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7), rs.getInt(8));
            }
            rs.close();
            ps.close();
            conn.close();
            return p;
    }

    public int cambiarEstadoAProducto(int idProveedor, int estado) throws Exception{

            Connection conn = daoHelper.dameConexion();
            String sql = "UPDATE PROVEEDOR SET estado=? WHERE ID_PROVEEDOR=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, estado);
            ps.setInt(2, idProveedor);
            ps.executeUpdate();
            ps.close();
            ps.close();
            conn.close();
            return daoHelper.TRANSACCION_EXITOSA;

    }

    public int cantidadDeProductosDeUnProveedor(int idProveedor) throws Exception{
            int cantProds=-1;
            Connection conn = daoHelper.dameConexion();
            String sql = "SELECT COUNT(*) FROM PROVEEDOR_X_PRODUCTO WHERE ID_PROVEEDOR = ? ";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, idProveedor);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                cantProds=rs.getInt(1);
            }
            rs.close();
            ps.close();
            conn.close();
            return cantProds;
    }

}
